package com.gzp.queue;

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

/**
 * 队列的异步消费者，使用异步线程监听。
 * 
 * @author Administrator
 *
 */
public class TestQueueConsumerSync {

	private static final String brokerURL = "tcp://localhost:61616";// 在activemq/conf/activemq.xml中
	private static final String queueName = "queue-hello";

	public static void main(String[] args) throws Exception {
		// 1、创建ConnectionFactory对象，指定服务端ip和端口
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(brokerURL);
		factory.setTrustAllPackages(true);// 为了接收ObjectMessage，需要方形所有的包。
		// 2、使用ConnectionFactory对象创建一个Connection对象。
		Connection connection = factory.createConnection();
		// 3、开启连接，调用Connection中的start方法
		connection.start();
		// 4、使用Connection对象创建一个Session对象，第一个参数是是否开启事务，第二个参数是连接者的签收状态。
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		// 5、使用Session对象创建一个Destination对象（topic、queue），此处创建一个Queue对象。
		Queue queue = session.createQueue(queueName);
		// 6、使用Session对象创建一个Consumer对象。
		MessageConsumer messageConsumer = session.createConsumer(queue);
		System.out.println("3号消费者");
		// 7、监听消息，2秒后没有消息就放弃监听。
		messageConsumer.setMessageListener(new MessageListener() {

			@Override
			public void onMessage(Message message) {
				if (message instanceof TextMessage) {
					TextMessage textMessage = (TextMessage) message;
					try {
						System.out.println(
								"接收到消息，消息内容为：" + textMessage.getText() + textMessage.getStringProperty("flag"));
					} catch (JMSException e) {
						e.printStackTrace();
					}
				}
				if (message instanceof MapMessage) {
					MapMessage mapMessage = (MapMessage) message;
					try {
						System.out.println("接收到MapMessage消息，消息内容为：id=" + mapMessage.getInt("id") + ",name="
								+ mapMessage.getString("name"));
					} catch (JMSException e) {
						e.printStackTrace();
					}
				}
				if (message instanceof ObjectMessage) {
					ObjectMessage objectMessage = (ObjectMessage) message;
					try {
						User user = (User) objectMessage.getObject();
						System.out.println("接收到ObjectMessage消息，消息的内容为：" + user);
					} catch (JMSException e) {
						e.printStackTrace();
					}
				}
			}
		});
		System.in.read();// 不让程序结束
		// 8、关闭资源。
		messageConsumer.close();
		session.close();
		connection.close();
	}
}
